/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Tema;

/**
 *
 * @author Soares
 */
public class TemaDAO {

    private Connection con;          //Objeto utilizado para o estabelecimento de uma conexÃ£o.
    private PreparedStatement pstm;  //Objeto utilizado para o envio de instruÃ§Ãµes SQL.  
    private ResultSet rs;            //Objeto utilizado para guardar o resultado de um SELECT.

    //O construtor da classe cria os recursos necessÃ¡rios para manipulaÃ§Ã£o de dados
    //do banco.
    public TemaDAO() throws SQLException {
        //Registra o conector com o banco de dados atravÃ©s do DriverManager.
        DriverManager.registerDriver(new org.postgresql.Driver());
        //Aqui criamos uma conexÃ£o para o envio de instruÃ§Ãµes SQL para o PostgreSQL.
        con = DriverManager.getConnection("jdbc:postgresql://localhost/politica",
                "postgres",
                "postgres");

    }

    //O mÃ©todo salvar envia uma instruÃ§Ã£o INSERT para o banco de dados PostgreSQL.    
    public void salvar(Tema tema) throws SQLException {
        //O caracter ? indica um parÃ¢metro (valor) que serÃ¡ passado para a instruÃ§Ã£o.
        pstm = con.prepareStatement(
                "insert into tema(id, nome, autor, cortitulo, corfundo) values (?, ?, ?, ?, ?)");
        //Aqui passamos os valores de cada um dos parÃ¢metros, na ordem que estÃ£o na instruÃ§Ã£o
        //SQL, da esquerda para direita.
        pstm.setInt(1, tema.getId());
        pstm.setString(2, tema.getNome());
        pstm.setString(3, tema.getAutor());
        pstm.setString(4, tema.getCor_titulo());
        pstm.setString(5, tema.getCor_fundo());
        pstm.execute();    //ApÃ³s informar todos os parÃ¢metros, mandamos executar a instruÃ§Ã£o.        
    }

    //O mÃ©todo alterar envia uma instruÃ§Ã£o UPDATE para o banco de dados PostgreSQL.
    public void alterar(Tema tema) throws SQLException {
        pstm = con.prepareStatement(
                "update tema set nome = ?, autor = ?, cortitulo = ?, corfundo = ? where id = ?");
        pstm.setString(1, tema.getNome());
        pstm.setString(2, tema.getAutor());
        pstm.setString(3, tema.getCor_titulo());
        pstm.setString(4, tema.getCor_fundo());
        pstm.setInt(5, tema.getId());   //Altera de acordo com o ID informado pelo usuÃ¡rio.
        pstm.execute();
    }

    //O mÃ©todo excluir envia uma instruÃ§Ã£o DELETE para o banco de dados PostgreSQL.
    public void excluir(Tema tema) throws SQLException {
        //Deleta o registro da tabela cujo ID Ã© informado no parÃ¢metro da instruÃ§Ã£o.
        pstm = con.prepareStatement(
                "delete from tema where id = ?");
        pstm.setInt(1, tema.getId());  //Exclui de acordo com o ID informado pelo usuÃ¡rio.
        pstm.execute();
    }

    //O mÃ©todo pesquisar serÃ¡ utilizado para buscar um registro da tabela de MP3
    //com base no ID da mÃºsica, que Ã© a chave primÃ¡ria da tabela MP3.
    public Tema pesquisar(int id) throws SQLException {
        Tema tema = null;
        pstm = con.prepareStatement("select * from tema where id = ?");
        pstm.setInt(1, id);
        rs = pstm.executeQuery();
        if (rs.next()) {
            tema = new Tema();
            tema.setId(rs.getInt("id"));
            tema.setNome(rs.getString("titulo"));
            tema.setAutor(rs.getString("texto"));
            tema.setCor_titulo(rs.getString("datahora"));
            tema.setCor_fundo(rs.getString("fonte"));
        }
        return tema;
    }

    //Este mÃ©todo Ã© utilizado pelo IndexMB para alimentar a lista de mÃºsicas
    //que serÃ¡ apresentada na pÃ¡gina index.xhtml atravÃ©s do componente
    //<h:dataTable>
    public List<Tema> getTodosTema() throws SQLException {
        ArrayList<Tema> temas = new ArrayList();  //Cria uma lista de mÃºsicas vazia.
        Tema tema = null;  //Define um objeto do tipo Mp3 tambÃ©m vazio.

        pstm = con.prepareStatement("select * from tema limit 1 ");

        rs = pstm.executeQuery();  //Executa o comando select.
        while (rs.next()) {          //Percorre todas as mÃºsicas retornadas pelo select.
            tema = new Tema();
            tema.setId(rs.getInt("id"));
            tema.setNome(rs.getString("nome"));
            tema.setAutor(rs.getString("autor"));
            tema.setCor_titulo(rs.getString("cortitulo"));
            tema.setCor_fundo(rs.getString("corfundo"));
            temas.add(tema);   //Adiciona cada mÃºsica na lista de mÃºsicas. 
        }
        return temas;
    }

}
